package service

import (
	"multimedia/utils"
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
	log "github.com/sirupsen/logrus"
)

// 消息详情
func (s *Srv) GetTidingsInfo(c *gin.Context) {
	idStr := c.Query("id")
	id, _ := strconv.Atoi(idStr)
	log.WithField("Func", "GetTidingsInfo").Infof(" the idStr is:%s", idStr)
	tidingsSlic, error := s.mysql.GetTidingsInfo(id)
	if error != nil {
		c.JSON(http.StatusOK, gin.H{"code": utils.DBError, "msg": error.Error(), "data": utils.EncryptDataByAes(nil)})
		return
	}
	c.JSON(http.StatusOK, gin.H{"code": utils.Success, "msg": "", "data": utils.EncryptDataByAes(tidingsSlic)})
}

// 消息列表
func (s *Srv) GetTidingsList(c *gin.Context) {
	userIdStr := c.Request.Header.Get("userId")
	if userIdStr == "" {
		c.JSON(http.StatusOK, gin.H{"code": utils.ReqParamErr, "msg": "参数不能为空"})
		return
	}
	userId, _ := strconv.Atoi(userIdStr)
	tidingsSlic, error := s.mysql.GetTidingsList(userId)
	if error != nil {
		c.JSON(http.StatusOK, gin.H{"code": utils.DBError, "msg": ""})
		return
	}
	c.JSON(http.StatusOK, gin.H{"code": utils.Success, "msg": "", "data": utils.EncryptDataByAes(tidingsSlic)})
}

// 修改消息阅读状态(支持批量)
func (s *Srv) UpdateView(c *gin.Context) {
	var tidIds utils.TidingsIds
	err := c.BindJSON(&tidIds)
	if err != nil {
		log.WithField("Func", "UpdateView").Errorf("bind json error", err)
		c.JSON(http.StatusOK, gin.H{"code": utils.ServiceInternalErr, "msg": "", "data": utils.EncryptDataByAes(false)})
		return
	}
	log.WithField("Func", "UpdateView").Infof(" the tidIds is:%+v", tidIds)
	ids := utils.IntArray2String(tidIds.TidingsIds)
	num := s.mysql.UpdateView(ids)
	if num < 1 {
		c.JSON(http.StatusOK, gin.H{"code": utils.DBError, "msg": ""})
		return
	}
	c.JSON(http.StatusOK, gin.H{"code": utils.Success, "msg": "", "data": utils.EncryptDataByAes(true)})
}

// 删除消息
func (s *Srv) DeleteTidingsInfo(c *gin.Context) {
	var tidIds utils.TidingsIds
	err := c.BindJSON(&tidIds)
	if err != nil {
		log.WithField("Func", "DeleteTidingsInfo").Errorf("bind json error", err)
		c.JSON(http.StatusOK, gin.H{"code": utils.ServiceInternalErr, "msg": "", "data": utils.EncryptDataByAes(false)})
		return
	}
	log.WithField("Func", "DeleteTidingsInfo").Infof(" the tidIds is:%+v", tidIds)
	tidiIds := tidIds.TidingsIds
	if len(tidiIds) < 1 {
		c.JSON(http.StatusOK, gin.H{"code": utils.ReqParamErr, "msg": "参数不能为空"})
		return
	}
	ids := utils.IntArray2String(tidiIds)
	num := s.mysql.DeleteTidingsInfo(ids)
	if num < 1 {
		c.JSON(http.StatusOK, gin.H{"code": utils.ModifyFail, "msg": ""})
		return
	}
	c.JSON(http.StatusOK, gin.H{"code": utils.Success, "msg": "", "data": utils.EncryptDataByAes(true)})
}
